#define _CRT_SECURE_NO_WARNINGS 1
//
//#include<iostream>
//#include<string>
//#include<vector>
//
//using namespace std;
//
//int n;
//bool map[11][11];
//bool check[11][11];
//
//bool dfs(int i, int j)
//{
//	if (i == j||map[i][j])
//		return true;
//	for (int k = 0; k < n; k++)
//	{
//		if (map[i][k] && !check[i][k])
//		{
//			check[i][k] = true;
//			if (dfs(k, j))return true;
//			check[i][k] = false;
//		}
//	}
//	return false;
//}
//
//int main()
//{
//	int  m, i, j;
//	cin >> n >> m;
//	while (m--)
//	{
//		cin >> i >> j;
//		map[i][j] = true;
//		map[j][i] = true;
//	}
//	cin >> i >> j;
//
//	if (dfs(i, j))
//	{
//		printf("There is a path between %d and %d.", i, j);
//	}
//	else
//	{
//		printf("There is no path between %d and %d.", i, j);
//	}
//
//	return 0;
//}


//#include<iostream>
//#include<string>
//#include<vector>
//#include<queue>
//
//using namespace std;
//
//int dx[4] = { 0,0,1,-1 };
//int dy[4] = { 1,-1,0,0 };
//int n, m, x, y;
//int path = 0;
//int ret = 0x3f3f3f3f;
//int map[101][101];
//bool check[101][101]; 
//
//struct node 
//{
//	int x;
//	int y;
//	int path;
//};
//
//void dfs(int i, int j)
//{
//	if (i == x && j == y)
//	{
//		if (path < ret)ret = path;
//		return;
//	}
//	for (int k = 0; k < 4; k++)
//	{
//		int new_i = i + dx[k];
//		int new_j = j + dy[k];
//		if (new_i >= 1 && new_i <= n && new_j <= m && new_j >= 1 && !map[new_i][new_j] && !check[new_i][new_j])
//		{
//			check[new_i][new_j] = true;
//			path++;
//			if(path<ret)dfs(new_i, new_j);
//			path--;
//			check[new_i][new_j] = false;
//		}
//	}
//	return;
//}
//
//void bfs(int i, int j)
//{
//
//	queue<node> q;
//	node t;
//	t.x = i;
//	t.y = j;
//	t.path = 0;
//
//	q.push(t);
//	check[1][1] = true;
//	while (!q.empty())
//	{
//		node tmp = q.front();
//		q.pop();
//		if (tmp.x == x && tmp.y == y)
//		{
//			ret = std::min(ret, tmp.path);
//			break;
//		}
//		for (int k = 0; k < 4; k++)
//		{
//			int new_i = tmp.x + dx[k];
//			int new_j = tmp.y + dy[k];
//			if (new_i >= 1 && new_i <= n && new_j <= m && new_j >= 1 && !map[new_i][new_j] && !check[new_i][new_j])
//			{
//				check[new_i][new_j] = true;
//				node _node;
//				_node.path = tmp.path + 1;
//				_node.x = new_i;
//				_node.y = new_j;
//				q.push(_node);
//			}
//		}
//	}
//}
//
//int main()
//{
//	cin >> n >> m;
//	cin >> x >> y;
//	for (int i = 1; i <= n; i++)
//	{
//		for (int j = 1; j <= m; j++)
//		{
//			cin >> map[i][j];
//		}
//	}
//
//	bfs(1, 1);
//
//	cout << ret;
//
//	return 0;
//}

